package crazyjava;

public class TestFinalVariable {
    //定义成员变量时指定默认值,合法
    private final int a = 6;
    //下面变量将在构造器或初始化块中分配初始值
    private final String str;
    private final int c;
    private final static double d;
    //既没有指定默认值,又没有在初始化块,构造器中指定初始值,下面定义char属性是不合法的
    //final char ch;
    //初始化块,可对没有指定默认值的实例属性指定初始值
    {
        //在初始化中为实例变量属性指定初始值
        str = "hello!";
        //定义a属性时已经指定了默认值,不能为a重新赋值,下面赋值语句非法
        //a=9;
    }
    //静态初始化快,可对没有指定默认值的类属性指定初始值
    static{
        //在静态初始化中为类属性指定初始值,合法
        d = 5.6;
    }
    //构造器可对没有指定默认值,且没有在初始化块中指定初始值的实例属性指定初始值
    public TestFinalVariable(){
        //如果初始化中对str指定了初始化值,构造器中不能对final变量重新赋值,下面赋值语句非法
        //str = "java"
        c = 5;
    }

    public static void main(String[] args){
        TestFinalVariable testFinalVariable = new TestFinalVariable();
        System.out.println(testFinalVariable.a);
        System.out.println(testFinalVariable.c);
        System.out.println(testFinalVariable.d);
        System.out.println(testFinalVariable.str);

    }
}
